#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
  int res;
  vector<vector<bool>> ltag;
  vector<vector<bool>> rtag;
  vector<vector<bool>> ztag;
  Solution()
      : ltag(9, vector<bool>(9, false)), rtag(9, vector<bool>(9, false)),
        ztag(9, vector<bool>(9, false)) {}

  void PrintBoard(vector<vector<char>> &board) {
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9; j++) {
        cout << board[i][j] << " ";
      }
      cout << endl;
    }
  }
  void search(vector<vector<char>> &board) {
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9; j++) {
        if (res < 0)
          return;
        if (board[i][j] != '.')
          continue;
        vector<bool> tag(9, false);
        int resNum = 9;
        for (int k = 0; k < 9; k++) {
          if (ltag[i][k] || rtag[j][k] || ztag[(i / 3) * 3 + (j / 3)][k]) {
            tag[k] = true;
            resNum--;
          }
        }
        if (!resNum)
          return;
        for (int k = 0; k < 9; k++) {
          if (!tag[k]) {
            ltag[i][k] = true;
            rtag[j][k] = true;
            ztag[(i / 3) * 3 + (j / 3)][k] = true;
            board[i][j] = k + 1 + '0';
            res--;
            if (!res) {
              res -= 100;
              PrintBoard(board);
              return;
            }
            search(board);
            ltag[i][k] = false;
            rtag[j][k] = false;
            ztag[(i / 3) * 3 + (j / 3)][k] = false;
            board[i][j] = '.';
            res++;
          }
        }
      }
    }
  }
  void solveSudoku(vector<vector<char>> &board) {
    res = 0;
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9; j++) {
        if (board[i][j] == '.') {
          res++;
          continue;
        }
        int num = board[i][j] - '0' - 1;
        ltag[i][num] = true;
        rtag[j][num] = true;
        ztag[(i / 3) * 3 + (j / 3)][num] = true;
      }
    }
    cout << res << endl;
    search(board);
  }
};

int main() {
  vector<vector<char>> c = {{'5', '3', '.', '.', '7', '.', '.', '.', '.'},
                            {'6', '.', '.', '1', '9', '5', '.', '.', '.'},
                            {'.', '9', '8', '.', '.', '.', '.', '6', '.'},
                            {'8', '.', '.', '.', '6', '.', '.', '.', '3'},
                            {'4', '.', '.', '8', '.', '3', '.', '.', '1'},
                            {'7', '.', '.', '.', '2', '.', '.', '.', '6'},
                            {'.', '6', '.', '.', '.', '.', '2', '8', '.'},
                            {'.', '.', '.', '4', '1', '9', '.', '.', '5'},
                            {'.', '.', '.', '.', '8', '.', '.', '7', '9'}};

  /*
    {'5', '3', '4', '6', '7', '8', '9', '1', '2'},
    {'6', '7', '2', '1', '9', '5', '3', '4', '8'},
    {'1', '9', '8', '3', '4', '2', '5', '6', '7'},
    {'8', '5', '9', '7', '6', '1', '4', '2', '3'},
    {'4', '2', '6', '8', '5', '3', '7', '9', '1'},
    {'7', '1', '3', '9', '2', '4', '8', '5', '6'},
    {'9', '6', '1', '5', '3', '7', '2', '8', '4'},
    {'2', '8', '7', '4', '1', '9', '6', '3', '5'},
    {'3', '4', '5', '2', '8', '6', '1', '7', '9'}}
    */
  Solution s;
  s.solveSudoku(c);
}

/*
{{'5','3','.','.','7','.','.','.','.'},
 {'6','.','.','1','9','5','.','.','.'},
 {'.','9','8','.','.','.','.','6','.'},
 {'8','.','.','.','6','.','.','.','3'},
 {'4','.','.','8','.','3','.','.','1'},
 {'7','.','.','.','2','.','.','.','6'},
 {'.','6','.','.','.','.','2','8','.'},
 {'.','.','.','4','1','9','.','.','5'},
 {'.','.','.','.','8','.','.','7','9'}}
 */